#ifndef _PROCESADORIMAGEN_H
#define	_PROCESADORIMAGEN_H
#include <string>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <vector>
#include <math.h>
#define CABECERA 10L /*Toda la cabecera*/
#define TOANCHO 18L /*Empieza ancho y alto*/
#define TIPO 1 /*Tipo de file*/
#define BXP 28L /*Bits por pixel*/

using namespace std;
typedef struct pix{
	unsigned char r,g,b;
}pixel;

typedef struct fra{
    unsigned int xMin, xMax, yMin,yMax;
}frame;

class ProcesadorImagen{

private:
    pixel** matPix;
    vector<frame> frameImagenes;
    bool esNegro(pixel unPixel);
    bool frameCorrecto(int xEmpiezaImagen, int xCorteImagen, int yInicial, int yFinal);
    
public:
    // la agregue para chequear que este tomando bien la cantidad de frames de la imagen
    int cantidadDeImagenes; 
    ProcesadorImagen(){
        this->cantidadDeImagenes = 0;
    }
    ~ProcesadorImagen(){
        
    }
    pixel** levantarImagenEnMatrizPixeles(const char* rutaOrig,long int* ancho,long int* alto,long int* despl);
    int* obtenerVector(long int ancho, long int alto, int finX, int inicioX, int finY, int inicioY);
    void guardarImagenDesdeMatrizPixeles(const char* rutaDest,const char* rutaOrig,pixel** matrizSave,long int ancho,long int alto,long int despl,long int padding);
    // Se cargaran los frames de las distintas imagenes extraidas de la imagen principal
    void boundingBox(string nombreImagen, long int ancho, long int alto);
    void verFrames();
    vector<frame> getFrames(){
        return this->frameImagenes;
    }
};


#endif	/* _PROCESADORIMAGEN_H */

